<?php
class TestKM_Producto_Modelo extends TestPojos
{
	public function testInstancia()
	{
		$this->assert(($this->crea() instanceof KM_Producto_Modelo), "1. instancia");
	}

	public function testGeneraPosicion()
	{
		$modelo   = new KM_Producto_Modelo($this->accesoBD);
		$control1 = ($modelo->generaPosicion() == 1);
			
		$instancia1 = $this->creaContenido("el titulo 1", "el texto 1");
		$instancia1->setPropiedad ("posicion", $modelo->generaPosicion());
		$instancia1->consolida();

		$control2 = ($instancia1->getPropiedad ("posicion") == 1);
		$control3 = ($modelo->generaPosicion() == 2);

		$instancia1->purga();

		$this->assert($control1, "1) generaPosicion");
		$this->assert($control2, "2) generaPosicion");
		$this->assert($control3, "3) generaPosicion");
	}

	public function testSube()
	{
		$modelo = new KM_Producto_Modelo($this->accesoBD);

		$instancia1 = $this->creaContenido("el titulo 1", "el texto 1");
		$instancia1->setPropiedad ("posicion", $modelo->generaPosicion());
		$identificador1 = $instancia1->consolida();

		$instancia2 = $this->creaContenido("el titulo 2", "el texto 2");
		$instancia2->setPropiedad ("posicion", $modelo->generaPosicion());
		$identificador2 = $instancia2->consolida();

		$instancia1   = null;
		$instancia2   = null;
		$instancia1   = new KM_Producto_Contenido($this->accesoBD, $identificador1);
		$instancia2   = new KM_Producto_Contenido($this->accesoBD, $identificador2);
		$control1     = ($instancia1->getPropiedad("posicion") == 1);
		$control2     = ($instancia2->getPropiedad("posicion") == 2);

		$modelo->sube($instancia1);

		$instancia1   = null;
		$instancia2   = null;
		$instancia1   = new KM_Producto_Contenido($this->accesoBD, $identificador1);
		$instancia2   = new KM_Producto_Contenido($this->accesoBD, $identificador2);
		$control1     = ($instancia1->getPropiedad("posicion") == 2);
		$control2     = ($instancia2->getPropiedad("posicion") == 1);

		$instancia1->purga();
		$instancia2->purga();

		$this->assert($control1, "1) sube");
		$this->assert($control2, "2) sube");
	}

	public function testBaja()
	{
        $modelo = new KM_Producto_Modelo($this->accesoBD);

        $instancia1 = $this->creaContenido("el titulo 1", "el texto 1");
        $instancia1->setPropiedad ("posicion", $modelo->generaPosicion());
        $identificador1 = $instancia1->consolida();

        $instancia2 = $this->creaContenido("el titulo 2", "el texto 2");
        $instancia2->setPropiedad ("posicion", $modelo->generaPosicion());
        $identificador2 = $instancia2->consolida();
		
		$instancia1   = null;
		$instancia2   = null;
		$instancia1   = new KM_Producto_Contenido($this->accesoBD, $identificador1);
		$instancia2   = new KM_Producto_Contenido($this->accesoBD, $identificador2);
		$control1     = ($instancia1->getPropiedad("posicion") == 1);
		$control2     = ($instancia2->getPropiedad("posicion") == 2);

		$modelo->baja($instancia2);

        $instancia1   = null;
        $instancia2   = null;
        $instancia1   = new KM_Producto_Contenido($this->accesoBD, $identificador1);
        $instancia2   = new KM_Producto_Contenido($this->accesoBD, $identificador2);
        $control1     = ($instancia1->getPropiedad("posicion") == 2);
        $control2     = ($instancia2->getPropiedad("posicion") == 1);

        $instancia1->purga();
		$instancia2->purga();

		$this->assert($control1, "1) baja");
		$this->assert($control2, "2) baja");
	}

	public function setUp()
	{
		$instancia = new KM_Producto_Contenido ($this->accesoBD);
		$instancia->borraTabla();
		$instancia->creaTabla();
	}

	private function creaContenido ($titulo, $texto)
	{
		$retorno = new KM_Producto_Contenido($this->accesoBD);

		$archivo = new Archivo(dirname (__FILE__) . DIRECTORY_SEPARATOR . "foto.jpg");

		$retorno->setPropiedad("titulo",  $titulo);
		$retorno->setPropiedad("texto",   $texto);
		$retorno->setPropiedad("foto",    $archivo);

		return $retorno;
	}

	private function crea()
	{
		$retorno = new KM_Producto_Modelo($this->accesoBD);

		return $retorno;
	}
}
?>